home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / sndhrdw / frogger.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  2KB  |  73 lines

  1. #include "driver.h"
  2.  
  3.  
  4. /* The timer clock which feeds the upper 4 bits of                        */
  5. /* AY-3-8910 port A is based on the same clock                            */
  6. /* feeding the sound CPU Z80.  It is a divide by                          */
  7. /* 5120, formed by a standard divide by 512,                            */
  8. /* followed by a divide by 10 using a 4 bit                               */
  9. /* bi-quinary count sequence. (See LS90 data sheet                        */
  10. /* for an example).                                                       */
  11. /*                                                                        */
  12. /* Bit 4 comes from the output of the divide by 1024                      */
  13. /*       0, 1, 0, 1, 0, 1, 0, 1, 0, 1                                    */
  14. /* Bit 3 comes from the QC output of the LS90 producing a sequence of    */
  15. /*          0, 0, 1, 1, 0, 0, 1, 1, 1, 0                                    */
  16. /* Bit 6 comes from the QD output of the LS90 producing a sequence of    */
  17. /*         0, 0, 0, 0, 1, 0, 0, 0, 0, 1                                    */
  18. /* Bit 7 comes from the QA output of the LS90 producing a sequence of    */
  19. /*         0, 0, 0, 0, 0, 1, 1, 1, 1, 1                                     */
  20.  
  21. static int frogger_timer[10] =
  22. {
  23.     0x00, 0x10, 0x08, 0x18, 0x40, 0x90, 0x88, 0x98, 0x88, 0xd0
  24. };
  25.  
  26. READ_HANDLER( frogger_portB_r )
  27. {
  28.     /* need to protect from totalcycles overflow */
  29.     static int last_totalcycles = 0;
  30.  
  31.     /* number of Z80 clock cycles to count */
  32.     static int clock;
  33.  
  34.     int current_totalcycles;
  35.  
  36.     current_totalcycles = cpu_gettotalcycles();
  37.     clock = (clock + (current_totalcycles-last_totalcycles)) % 5120;
  38.  
  39.     last_totalcycles = current_totalcycles;
  40.  
  41.     return frogger_timer[clock/512];
  42. }
  43.  
  44.  
  45.  
  46. WRITE_HANDLER( frogger_sh_irqtrigger_w )
  47. {
  48.     static int last;
  49.  
  50.  
  51.     if (last == 0 && (data & 0x08) != 0)
  52.     {
  53.         /* setting bit 3 low then high triggers IRQ on the sound CPU */
  54.         cpu_cause_interrupt(1,0xff);
  55.     }
  56.  
  57.     last = data & 0x08;
  58. }
  59.  
  60. WRITE_HANDLER( frogger2_sh_irqtrigger_w )
  61. {
  62.     static int last;
  63.  
  64.  
  65.     if (last == 0 && (data & 0x01) != 0)
  66.     {
  67.         /* setting bit 0 low then high triggers IRQ on the sound CPU */
  68.         cpu_cause_interrupt(1,0xff);
  69.     }
  70.  
  71.     last = data & 0x01;
  72. }
  73.